<?php // $Id: array.php,v 1.3 2006/07/02 21:25:27 alex Exp $
/**
 * Класс-контейнер вложенных данных
 *
 */
//
// Итератор применяется теперь для data  implements Iterator
class sharpobj_data_item_array extends sharpobj_data_item_data 
{
    // Переопределяем тип данных
    protected $type = 'array';
    protected $cursor = 0;

    protected function getCondition()
    {
        // Получить состояние объекта
        // Для проверки состояний объекта пользователем
        // используйте функции проверки состояний
        // Для внешней проверки используйте функции is???

        // У этого элемента состояние не проверяется
        $condition = 'data';

        return $condition;
    }
    function add($datapath=null,$type_or_dataobj,$options=null)
    {   // Добавляем безымянный элемент
        if ($this->pathThis($datapath) OR $this->pathNextLast($datapath))
        {   // 
            return $this->addSubItem(null,
                                      $type_or_dataobj,
                                       $options);
        }else 
        {
            mst_error('Добавление элемента второго уровня',"Функция предназначена для работы с элементами первого уровня",1);
        }
    }

    // Переопределяем филтр, чтоб преобразовывать массив в объект
    // Вложенность массива не поддерживается
    function viewIn_plain($opt=null)
    {
        $data = $this->getSource();
    	foreach ($data as $d_key=>$d_val)
	    {
	        $d_type = 'string';
	        // Создаем элемент
            if (is_int($d_val))
            {
                $d_type = 'int';
            }elseif(is_float($d_val))
            {
                $d_type = 'float';
            }elseif(is_string($d_val) or is_scalar($d_val) )
            {
                $d_type = 'string';
            }else
            {
               continue;
            }
            // Добавляем элемент нужного типа
            $this->addSubItem($d_key,$d_type);
            // $this->add($d_key,$d_type);echo $d_key;
	        // Записываем данные
	        $this->set('plain',$d_val,$d_key);
	    }
        // $result = $this->subitemRecurse('set','plain',$data,$opt);
        // return $result['no_false'];
        return true;
    }
	/* Итератор уже применен  
    // Посчитать элементы
    function count()
    {
        return count($this->r_data);
    }
    
    // Функции итерации
    public function rewind()
    {
        reset($this->r_data);
    }
    public function current()
    {
        $var = current($this->r_data);
        return $var;
    }

    public function key()
    {
        $var = key($this->r_data);
        return $var;
    }

    public function next()
    {
        $var = next($this->r_data);
        return $var;
    }
    public function valid()
    {
        $var = $this->current() !== false;
        return $var;
    }
    */


}
?>